/*
 * Matrix3.h
 *
 *  Created on: Jan 14, 2012
 *   
 */

#ifndef MATRIX3_H_ 
#define MATRIX3_H_

namespace Physics
{
	class Matrix3
	{
	private:
		float xx, xy, xz;
		float yx, yy, yz;
		float zx, zy, zz;
	
		// should it return the newly scaled matrix?
		// or just scale itself by void?
		// e.g: Matrix3 matrix;
		// matrix = matrix.Scale(3,3,3)
		// or
		// Matrix3 matrix;
		// matrix.Scale(3,3,3);  
		void Scale(float scaleX, float scaleY, float scaleZ);
	
	public:
		Matrix3();
		Matrix3( float XX, float XY, float XZ, 
			     float YX, float YY, float YZ,
			     float ZX, float ZY, float ZZ );
		~Matrix3();
		void identity();
		float getIndex(int row, int col);
		Matrix3 operator +(Matrix3 &matrix);
		Matrix3 operator -(Matrix3 &matrix);
		Matrix3 operator *(Matrix3 &matrix);
		
		// calls Scale(x,y,z)
		void Scale(float scaleAmount);

		/* //not sure if these methods are needed in Matrix3
		
		// should it return the newly translated matrix?
		// or just translate itself by void?
		// e.g: Same as Scale
		//void Translate(float translateX, float translateY, float translateZ);

		//void RotateX(float theta);

		//void RotateY(float theta);

		//void RotateZ(float theta);

		*/
	};
} /* NAMESPACE */

#endif /* MATRIX3_H_ */
